/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camara.jersey.Ws;

import com.camara.jersey.Dao.Factory;
import com.camara.jersey.Model.Acteur;
import com.camara.jersey.Model.Film;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

@Path("/acteur")
public class ActeurWs {

    /**
     *
     * @return la liste des acteurs disponibles dans la base de donnee
     */
    @GET
    @Produces({MediaType.APPLICATION_JSON})
    public List<Acteur> getAllActeur() {
        List<Acteur> listActeur = new ArrayList<>();
        Factory fact = new Factory();
        fact.open();
        listActeur = fact.acteurFindAll();
        fact.close();
        return listActeur;

    }

    /**
     *
     * @param id
     * @return un acteur de par son Id
     */
    @GET
    @Path("{id}")
    @Produces({MediaType.APPLICATION_JSON})
    public Acteur getActeur(@PathParam("id") Integer id) {
        Acteur acteur = new Acteur();
        Factory fact = new Factory();
        fact.open();
        acteur = fact.acteurfindById(id);
        fact.close();
        return acteur;

    }

    /**
     *
     * @param id
     * @return la liste des films d'un acteur
     */
    @GET
    @Path("{id}/film")
    @Produces({MediaType.APPLICATION_JSON})
    public List<Film> getFilmByActeur(@PathParam("id") Integer id) {
        List<Film> listFilm = new ArrayList<>();
        Acteur acteur = new Acteur();
        Factory fact = new Factory();
        fact.open();
        acteur = fact.acteurfindById(id);
        listFilm = acteur.getFilmList();
        fact.close();
        return listFilm;

    }

    /**
     *
     * @param id
     * @return l'adresse d'un acteur de par son Id
     */
    @GET
    @Path("{id}/adresse")
    @Produces({MediaType.TEXT_PLAIN})
    public String getAdresseActeur(@PathParam("id") Integer id) {
        String adresse = null;
        Acteur acteur = new Acteur();
        Factory fact = new Factory();
        fact.open();
        acteur = fact.acteurfindById(id);
        adresse = acteur.getAdresse();
        fact.close();
        return adresse;

    }

    /*
     @POST
     @Produces({MediaType.APPLICATION_JSON})
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     public Acteur setActeur(@FormParam("id") String id,
     @FormParam("nom") String nom, @FormParam("prenom") String prenom,
     @FormParam("adresse") String adresse,
     @Context HttpServletResponse servletResponse) throws IOException {
     Acteur actor = new Acteur ();
     Factory fact = new Factory ();
     fact.open();
     System.out.println ("Hahahahahahahhahahahahahahahahhahahahahahaha");
     if ((id != null) && (nom != null) && (prenom != null) && (adresse!=null)) {
     Integer Id= Integer.parseInt(id);
     Acteur acteur = new Acteur (Id, nom, prenom, adresse);
     actor = fact.setActeur(acteur);                 
     }
     fact.close();
     // servletResponse.sendRedirect("http://localhost:8080/com.camara.jersey.Json/user");
     return actor;

     }
    
     */
    
    @POST
    @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    public Response createActeur(Acteur acteur) {
        Factory fact = new Factory();
        Acteur actor = new Acteur();
        fact.open();
        actor = fact.createdActeur(acteur);
        fact.close();

        return Response.status(Status.CREATED)
                .entity(actor)
                .build();

    }
    
    @PUT
    @Path ("{id}")
   // @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    public Response putActeur(@PathParam("id") Integer id, Acteur acteur) {
        Factory fact = new Factory();
        Acteur actor = new Acteur();
        Acteur newActor = acteur;
        Acteur old = new Acteur ();
        fact.open();
        old = fact.acteurfindById(id);
        fact.removeActeur(old);
        actor = fact.createdActeur(newActor);
       // System.out.println ("================================"+actor.getAdresse());
        fact.close();

        return Response.status(Status.OK)
             //   .entity(actor)
                .build();

    }
    
    
    @DELETE
    @Path ("{id}")
    @Produces({MediaType.APPLICATION_JSON})
    public Response deleteActeur(@PathParam("id") Integer id) {
        Factory fact = new Factory();
        Acteur actor = new Acteur();
        Acteur old = new Acteur ();
        fact.open();
        old = fact.acteurfindById(id);
        actor=fact.removeActeur(old);
        fact.close();

        return Response.status(Status.OK)
                .entity(actor)
                .build();

    }
    
    

}
